package model

import (
	"gorm.io/gorm"
	"smart-health-platforms/config"
	"time"
)

type Bargain struct {
	Id         uint32         `gorm:"column:id;type:int UNSIGNED;primaryKey;not null;" json:"id"`
	Name       string         `gorm:"column:name;type:varchar(255);comment:活动名称;default:NULL;" json:"name"`        // 活动名称
	SkuId      int32          `gorm:"column:sku_id;type:int;comment:规格id;default:NULL;" json:"sku_id"`             // 规格id
	StaTime    time.Time      `gorm:"column:sta_time;type:datetime(3);comment:开始时间;default:NULL;" json:"sta_time"` // 开始时间
	EndTime    time.Time      `gorm:"column:end_time;type:datetime(3);comment:结束时间;default:NULL;" json:"end_time"` // 结束时间
	FinalPrice int32          `gorm:"column:final_price;type:int;comment:帮砍人数;default:NULL;" json:"final_price"`   // 帮砍人数
	People     int32          `gorm:"column:people;type:int;default:NULL;" json:"people"`
	Num        int32          `gorm:"column:num;type:int;default:NULL;" json:"num"`
	Price      float64        `gorm:"column:price;type:decimal(10, 2);comment:帮砍金额;default:NULL;" json:"price"`        // 帮砍金额
	Status     int32          `gorm:"column:status;type:int;comment:1-未提交2-未开始3-进行中4-已结束;default:NULL;" json:"status"` // 1-未提交2-未开始3-进行中4-已结束
	CreatedAt  time.Time      `gorm:"column:created_at;type:datetime(3);default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt  time.Time      `gorm:"column:updated_at;type:datetime(3);default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt  gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (b *Bargain) TableName() string {
	return "bargain"
}
func (b *Bargain) AddBargain() error {
	return config.DB.Create(&b).Error
}
func (b *Bargain) UpdateBargain() error {
	return config.DB.Model(&b).Updates(&b).Error
}
func (b *Bargain) DeletedBargain() error {
	return config.DB.Model(&b).Delete(&b).Error
}
func (b *Bargain) GetBargain() error {
	return config.DB.Where("id = ?", b.Id).Limit(1).Find(&b).Error
}
func (b *Bargain) GetBargainList() ([]Bargain, error) {
	var list []Bargain
	// 查询条件：排除已结束状态（status=4），并按开始时间倒序排列
	err := config.DB.Where("status = ?", 3).
		Order("sta_time DESC").
		Find(&list).Error
	return list, err
}

// 带分页的列表查询（可选扩展）
func (b *Bargain) GetBargainListByPage(page, pageSize int) ([]Bargain, int64, error) {
	var list []Bargain
	var total int64
	// 先查询总数
	if err := config.DB.Model(&Bargain{}).Where("status != ?", 4).Count(&total).Error; err != nil {
		return nil, 0, err
	}
	// 计算偏移量
	offset := (page - 1) * pageSize
	// 查询分页数据
	err := config.DB.Where("status != ?", 4).
		Order("sta_time DESC").
		Limit(pageSize).
		Offset(offset).
		Find(&list).Error

	return list, total, err
}
